字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
1 2
| 输入: num1 = "2", num2 = "3" 输出: "6"
|
示例 2:
1 2
| 输入: num1 = "123", num2 = "456" 输出: "56088"
|
说明:
1.num1 和 num2 的长度小于110。
2.num1 和 num2 只包含数字 0-9。
3.num1 和 num2 均不以零开头,除非是数字 0 本身。
4.不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Solution { public String multiply(String num1, String num2) { if(num1==null||num2==null)return ""; int l1=num1.length(); int l2=num2.length(); if(l1==0||l2==0)return ""; int[] ls=new int[l1+l2]; for(int i=l1-1;i>=0;i--) { int x1=num1.charAt(i)-'0'; for(int j=l2-1;j>=0;j--) { int x2=num2.charAt(j)-'0'; ls[i+j+1]+=x1*x2; //System.out.println("第"+i+j+"格子放"+x1*x2); } } StringBuffer sb=new StringBuffer(); for(int i=l1+l2-1;i>=0;i--) { int x=ls[i]%10; int c=ls[i]/10; if(c!=0) ls[i-1]+=c; sb.append(x); } sb.reverse(); int begin = 0; for(;;begin++) { if(begin==sb.length())return "0"; if(sb.charAt(begin)!='0')break; } return sb.substring(begin); } }
|